#include<bits/stdc++.h>
using namespace std;

int T,n,m,L,V;
int d[100005],v[100005],a[100005];
int p[100005];
int need[100005];
int pos=0;
int cnt=0;
int ans;
int minm=10000000;

int range(int v,int a)
{
    int s=(V*V-v*v)/(2*a)+0.5;
    for(int i=1;i<=m;i++)
    {
        if (p[i]>=s)
        {
            ans=i;
            break;
        }
    }
    return ans;
}

void detect(int d,int v,int a)
{
    if (a==0)
    {
        if (v>V)
        {
            pos=1;
            cnt++;
        }
    }
    else
    {
        if (v>V && a>0)
        {
            pos=1;
            cnt++;
        }
        if (v<V && a>0)
        {
            if((V*V-v*v)/(2*a)+0.5<=p[m])
            {
                cnt++;
                if (m-range(v,a)+1<minm)
                {
                    minm=m-range(v,a)+1;
                }
            }
        }
    }
}

int main()
{
    freopen("detect3.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>T;
    for(int iT=1;iT<=T;iT++)
    {
        cin>>n>>m>>L>>V;
        for(int i=1;i<=n;i++)
        {
            cin>>d[i]>>v[i]>>a[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin>>p[i];
        }
        sort(p+1,p+1+m);
        for(int i=1;i<=n;i++)
        {
            detect(d[i],v[i],a[i]);
        }
        if (a[1]==0)
            cout<<cnt<<" "<<m-1<<endl;
        if (a[1]>0)
            cout<<cnt<<" "<<m-minm;
        cnt=0;
    }

    return 0;
}
